public class Solution {
    public ListNode removeElements(ListNode head, int val) {
        // 创建一个虚拟的头节点，方便处理头节点需要被删除的情况
        ListNode dummy = new ListNode(0);
        dummy.next = head;

        ListNode current = dummy; // 当前节点从虚拟头节点开始

        // 遍历链表
        while (current.next != null) {
            if (current.next.val == val) {
                // 删除当前节点的下一个节点
                current.next = current.next.next;
            } else {
                // 向下移动到下一个节点
                current = current.next;
            }
        }

        // 返回去掉指定值节点后的新头节点
        return dummy.next;
    }
}

// 定义链表节点类
class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}
